The Java Telephony API (JTAPI) is a portable, object-oriented application programming interface for computer telephony applications written in the Java™ programming language. It is described in documents that are available at java.sun.com/products/jtapi. These documents include “The Java Telephony API: An Overview” (version 1.2, October, 1997) and “An Introduction to JTAPI (Java Telephony API),” by Spencer Dawkins (release 1.2, rev. 0.7, November, 1997), as well as the JTAPI Telephony Specification itself (version 1.3, June, 1999). All of these documents are incorporated herein by reference. JTAPI uses a “core plus extensions” structure, in which the “Core JTAPI” package includes the basic call object model used in placing, answering and terminating telephone calls, while the extension packages add features required by more advanced applications.
FIG. 1 is a block diagram that shows the basic elements of the JTAPI environment, as they are known in the art. JTAPI enables application vendors to write an application 20 that will provide value-added telephony services to the user, independent of the type of network 22 and communication protocol stack 24 that are used to carry the services. Examples of Java telephony applications (as listed on the above-mentioned JTAPI Web site) include:                Call logging and tracking        Auto-dialing        Screen-based telephone applications        Screen-pop software        Call routing applications        Automated attendants        Interactive voice response (IVR) systems        Agent software        Call center management        Fax send and receive        Voice mail.These applications are listed by way of example, and by no means represent an exhaustive list of such applications.        
In order to enable such telephony application services, the network provider must implement JTAPI provider software 28 that exposes an application programming interface (API) 26 complying with JTAPI specifications. The same API is exposed regardless of the underlying network platform: for example, network 22 may be a circuit-switched network, such as a public switched telephone network (PSTN) with a SS7 protocol stack or a private branch exchange (PBX) using proprietary protocols, or it may be a packet-switched network, such as an Internet Protocol (IP) network using a H.232 stack to carry voice over IP (VoIP). Because API 26 is uniform among all network types, application 20 should run transparently across all platforms. The application developer need only know that the provider supports the Java extension packages used by the application.
Provider implementations 28, however, are tightly bound with telephony stack 24 and must be written for the provider's specific telephony environment. The JTAPI specification does not give standard classes that can be reused across different provider platforms. Service providers must therefore develop their own implementations, after having first gained a sufficient understanding of Java, JTAPI and object-oriented programming methods. Furthermore, different providers may interpret the specification differently, so that their implementations may not exhibit completely uniform behavior in response to API calls. Multi-platform providers, such as call centers offering both PSTN and VoIP services, must develop separate implementations for each platform they support.
Along similar lines to JTAPI, Microsoft Corporation (Redmond, Wash.) offers a telephony API for Windows® operating systems known as “TAPI.” This API is described in a white paper entitled, “IP Telephony with TAPI 3.0” (1997), which is available from Microsoft and is incorporated herein by reference. TAPI is said to enable convergence of traditional PSTN telephony and IP telephony, by providing generic methods for making connections between two or more machines, and accessing any media streams involved in the connections. In addition to its API for telephony applications, TAPI 3.0 also defines a standard Telephony Service Provider Interface (TSPI), for use by service providers in linking the TAPI protocol-independent call model with their own protocol-specific call control mechanisms.
Another, related environment for telephony application support is “Java APIs for Integrated Networks” (JAIN™), which is intended to be used in creating next-generation network services, which are portable across heterogeneous networks. JAIN is built around a Java Call Control (JCC) API, which is defined in the “JAIN JCC Specification” (Version 1.0, 2001), which is incorporated herein by reference. This specification is available at jcp.org/jsr/detail/21.prt. The JCC API is a Java interface for creating, monitoring, controlling manipulating and tearing down communications sessions in a converged PSTN, packet-switched and wireless environment. This API is meant to be consistent with JTAPI, although the JAIN call processing capabilities are not as extensive as those provided by JTAPI.
In addition, the JAIN JCC is designed for compatibility with “Parlay,” a set of open APIs that have been standardized by an industry consortium known as the Parlay Group. Information regarding the Parlay Group is available at www.parlay.org. Relevant aspects of the Parlay APIs are described, for example, in a specification document entitled Parlay APIs 2.1: Generic Call Control Service Interfaces (June, 2000), which is incorporated herein by reference.